package com.mp.demo.component;

import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;
import org.apache.ibatis.reflection.MetaObject;
import org.springframework.stereotype.Component;

import java.time.LocalDateTime;

/**
 * @program: demo
 * @description: 自动填充处理器
 * @author: JuoChiu
 * @create: 2019-11-06 16:25
 **/
@Component
public class MyMetaObjectHandler implements MetaObjectHandler {

    /**
     * 创建时间字段名
     */
    private static final String CREATE_TIME = "createTime";

    /**
     * 修改时间字段名
     */
    private static final String UPDATE_TIME = "updateTime";

    /**
     * 发送时间字段名
     */
    private static final String SEND_TIME = "sendTime";


    /**
     * 插入元对象字段填充（用于插入时对公共字段的填充）
     *
     * @param metaObject 元对象
     */
    @Override
    public void insertFill(MetaObject metaObject) {
        System.out.println("---新增自动填充insertFill....");
        if (metaObject.hasSetter(CREATE_TIME)) {
            setInsertFieldValByName(CREATE_TIME, LocalDateTime.now(), metaObject);
        }
        if (metaObject.hasSetter(SEND_TIME)) {
            setInsertFieldValByName(SEND_TIME, LocalDateTime.now(), metaObject);
        }
    }

    /**
     * 更新元对象字段填充（用于更新时对公共字段的填充）
     *
     * @param metaObject 元对象
     */
    @Override
    public void updateFill(MetaObject metaObject) {
        // 手动给了就不自动填充
        Object val = getFieldValByName(UPDATE_TIME, metaObject);
        if (val == null) {
            System.out.println("----修改自动填充updateFill....");
            setUpdateFieldValByName(UPDATE_TIME, LocalDateTime.now(), metaObject);
        }
    }
}
